NoxBFT使用手册
1. 引言
1.1 编写目的
此文档描述Hyperchain中如何使用NoxBFT共识算法,使软件开发人员能清楚地了解NoxBFT共识,便于Hyperchain的开发工作。
1.2术语
英文 |
中文 |
含义 |
|---|---|---|
NoxBFT |
/ |
Hyperchain新型拜占庭共识算法 |
h otstuff |
/ |
NoxBFT共识算法的底层共识协议 |
mempool |
交易 内存池 |
NoxBFT共识算法的交易池 |
che ckpoint |
检查点 |
Nox BFT共识算法的检查点协议,用于验证执行结果的正确性 |
2. 配置说明
在 configuration/<分区名>/ns_dynamic.toml 配置文件中可以选择启用的算法类型为 NoxBFT ,在 configuration/<分区名>/ns_static.toml 配置文件中可以配置NoxBFT算法相关的设置参数
2.1 ns_dynamic.toml
通过更改 consensus.algo 配置项使用NoxBFT共识算法
[consensus]algo = “NoxBFT” # Support RBFT or NoxBFT
注意:若非首次部署,请查看《线下共识切使用换手册》进行NoxBFT共识算法配置
2.2 ns_static.toml
2.2.1 hotstuff配置项
[consensus.hotstuff] # hotstuff configurations batch_time = "0.1s" # Primary generate a proposal if there are pending requests, although batchsize isn't reached yet. max_block_size = 500 # max number of one block generated by leader. proposer_type = "rotating_proposer" # proposer switching type, now support: # "fixed_proposer" # "rotating_proposer" contiguous_rounds = 1 # how many rounds can one proposer continue leading in rotating proposer strategy. checkpoint_cycle = 10 # how many round to trigger a new checkpoint cycle. checkpoint_interval = 100 # how many rounds allowed that do not generate checkpoints checkpoint_mem_cache_size = 2 # the maximum checkpoints with blocks can be cached in memory checkpoint_share_type = "cross" # the checkpoint sharing type. (default: cross) # nox (share checkpoints by NoxBFT messages) # cross (share checkpoints by sending specific messages and broadcast it to all validators) pacemaker_initialTimeout = "0.5s" # the base timeout value of Pacemaker. exponent_base = 2 # how much we increase interval every time max_exponent = 3 # maximum time interval which won't exceed max_exponent enforce_increasing_timestamps = false # keep the timestamp of the block is increasing. backward_round_limit = 10 # how many blocks can be between ordered and checkpoint # decide by checkpoint_mem_cache_size and checkpoint_cycle
batch_time:区块打包等待时间,当从mempool中获取交易数目小于 max_block_size 时最多允许等待的时间。(默认值为 0.1s )
max_block_size:区块打包交易数量,每个区块允许的最大交易数量。(默认值为 500 )
proposer_type:主节点选举模式,目前支持两种类型(默认值为 rotating_proposer )
fixed:固定主节点模式(仅有于测试,不建议使用)
rotating_proposer:轮换主节点
contiguous_rounds:当 proposer_type 为 rotating_proposer 时,每个主节点连续当选的轮数。(默认值为 1 )
checkpoint_cycle:检查点生成周期,每提交执行多少个区块会生成一次检查点。(默认值为 10 )
checkpoint_interval:检查点生成间隔轮数,超过此间隔共识轮数未生成检查点时,会强制触发检查点的生成。(默认值为 100 )
checkpoint_mem_cache_size:当检查点协议触发旧共识数据清理时,允许缓存多少个检查点中的区块(用于帮助落后节点同步,默认值为 2 )
checkpoint_share_type:检查点分享模式,目前支持两种类型。(默认值为 cross )
cross:采用节点间互相广播的方式分享检查点,建议在共识集群 节点数量较少 时使用
nox:采用主节点搜集的方式分享检查点,建议在共识集群 节点数量较多 时使用
pacemaker_initialTimeout:每轮共识初始超时时间。(默认值为 0.5s )
exponent_base:连续超时时的增长指数的基数(超时时间 = 初始超时时间 * 基数 ^ 幂数,默认值为 2 ,即每次连续超时,超时时间为之前的两倍 )
max_exponent:连续超时时间增长指数的最大幂数 (最大超时时间 = 初始超时时间 * 基数 * 最大幂数,默认值为 3 ,即最大超时时间为4秒)
enforce_increasing_timestamps:是否强制每轮共识提案具有递增的时间戳。(默认值为 false )
backward_round_limit:允许落后节点最大落后的轮数。(默认值为 10 )
2.2.2 mempool配置项目
[consensus.hotstuff.mempool] type = "fifo" # memory pool mode: solo(no shared), # fifo(shared with first in first out sorting) # priced(shared with tx price sorting) pool_size = 50000 # How many txs could the mempool stores in total commit_cache_size = 3 # the maximum committed blocks with their transactions can be cached in memory
type:交易内存池的类型,目前允许三种类型(默认值*fifo*)
solo:不与其他节点分享交易(仅用于测试,不推荐使用)
fifo:交易按先入先出顺序打包,支持节点间通过网络分享交易
priced:交易按交易GasPrice从高到低排序打包,支持节点间通过网络分享交易
pool_size:交易池中最大允许的交易数量,solo 与 fifo 类型超过此数量时会拒绝新加入的交易; priced 类型超过此数量时,会剔除价格较低的交易并接收价格较高的新交易。(默认值为 50000 )
commit_cache_size:上链交易的缓存,允许缓存多少个区块中的交易。(默认值为 3 )
3.注意事项
需要注意集群中共识节点采用相同的配置,否则可能因为配置差异而成为拜占庭节点。